/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mrp.web;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import mrp.beans.LineaProduccionBean;
import mrp.entity.LineaProduccion;
import org.primefaces.component.dialog.Dialog;
import org.primefaces.component.inputtext.InputText;
import org.primefaces.component.inputtextarea.InputTextarea;

/**
 *
 * @author root
 */
@ManagedBean(name="lineaproduccionWeb")
@SessionScoped
public class LineaProduccionWeb implements Serializable{
    
    @ManagedProperty("#{lineaproduccion}")
    private LineaProduccionBean lineaproduccion;
    
    //_______________________________________________________________________________________________ 
    //----------------------------Componentes de ingreso--------------------------------
        private InputText textNumeroLineaProduccion;
        private InputText textNombreLineaProduccion;
        private InputTextarea textDescripcionLineaProduccion;
        private InputText textFechaCreacionLineaProduccion;
        
    //----------------------------Componentes de consulta--------------------------------
    //Atributos para cargar la tabla
        private List <LineaProduccion> tablaDatosLineaProduccion;
        private List <String> datosLineaProduccionSeleccionado;
        private LineaProduccion lineaProduccionSeleccionado; 
    
    //-----------------Componentes modificarDatos-----------------------    
        private LineaProduccion lineaProduccionActualizarDatos;
    //-----------------fin Componentes modificarDatos-----------------------    
        
    //_______________________________________________________________________________________________  
    //********************metodos Getters and Setters***************************

    public LineaProduccionBean getLineaproduccion() {
        return lineaproduccion;
    }

    public void setLineaproduccion(LineaProduccionBean lineaproduccion) {
        this.lineaproduccion = lineaproduccion;
    }
   //-----------------Getters and Setters ingresar ---------------------------   

    public InputTextarea getTextDescripcionLineaProduccion() {
        return textDescripcionLineaProduccion;
    }

    public void setTextDescripcionLineaProduccion(InputTextarea textDescripcionLineaProduccion) {
        this.textDescripcionLineaProduccion = textDescripcionLineaProduccion;
    }

    public InputText getTextFechaCreacionLineaProduccion() {
        return textFechaCreacionLineaProduccion;
    }

    public void setTextFechaCreacionLineaProduccion(InputText textFechaCreacionLineaProduccion) {
        this.textFechaCreacionLineaProduccion = textFechaCreacionLineaProduccion;
    }

    public InputText getTextNombreLineaProduccion() {
        return textNombreLineaProduccion;
    }

    public void setTextNombreLineaProduccion(InputText textNombreLineaProduccion) {
        this.textNombreLineaProduccion = textNombreLineaProduccion;
    }

    public InputText getTextNumeroLineaProduccion() {
        return textNumeroLineaProduccion;
    }

    public void setTextNumeroLineaProduccion(InputText textNumeroLineaProduccion) {
        this.textNumeroLineaProduccion = textNumeroLineaProduccion;
    }
    
    //-----------------Fin Getters and Setters ingresar ---------------------------

    //-----------------Getters and Setters consultar --------------------------- 

    public List<String> getDatosLineaProduccionSeleccionado() {
        return datosLineaProduccionSeleccionado;
    }

    public void setDatosLineaProduccionSeleccionado(List<String> datosLineaProduccionSeleccionado) {
        this.datosLineaProduccionSeleccionado = datosLineaProduccionSeleccionado;
    }

    public LineaProduccion getLineaProduccionSeleccionado() {
        return lineaProduccionSeleccionado;
    }

    public void setLineaProduccionSeleccionado(LineaProduccion lineaProduccionSeleccionado) {
        this.lineaProduccionSeleccionado = lineaProduccionSeleccionado;
    }

    public List<LineaProduccion> getTablaDatosLineaProduccion() {
        return tablaDatosLineaProduccion;
    }

    public void setTablaDatosLineaProduccion(List<LineaProduccion> tablaDatosLineaProduccion) {
        this.tablaDatosLineaProduccion = tablaDatosLineaProduccion;
    }
    //-----------------Getters and Setters consultar --------------------------- 
    
    //-----------------Getters and Setters modificar ---------------------------   

    public LineaProduccion getLineaProduccionActualizarDatos() {
        return lineaProduccionActualizarDatos;
    }

    public void setLineaProduccionActualizarDatos(LineaProduccion lineaProduccionActualizarDatos) {
        this.lineaProduccionActualizarDatos = lineaProduccionActualizarDatos;
    }
    //-----------------Fin Getters and Setters modificar ---------------------------
    
    //_______________________________________________________________________________________________    
   //*********************Metodos generales************************  
   public void setImputText(String form, String [] componente)// setea los imputText de vistas de ingresarVendedor.xhtml y modificarDatosVendedor.xhtml con los componentes de esta clase
   {
       javax.faces.context.FacesContext facesContext = javax.faces.context.FacesContext.getCurrentInstance();
      
       javax.faces.component.UIViewRoot root = facesContext.getViewRoot();

       this.setTextNumeroLineaProduccion((InputText)root.findComponent(form).findComponent(componente[0]));
       this.setTextNombreLineaProduccion((InputText)root.findComponent(form).findComponent(componente[1]));                            
       this.setTextDescripcionLineaProduccion((InputTextarea)root.findComponent(form).findComponent(componente[2]));                            
       this.setTextFechaCreacionLineaProduccion((InputText)root.findComponent(form).findComponent(componente[3]));                            
    }
    public void resetComponentes()
    {        
        try{                  
            this.getTextNumeroLineaProduccion().setValue("");
            this.getTextNombreLineaProduccion().setValue("");  
            this.getTextDescripcionLineaProduccion().setValue("");
            this.getTextFechaCreacionLineaProduccion().setValue("");
        }
        catch(java.lang.NullPointerException npe)
        {
            System.out.println("-------------Excepcion en resetComponentes() "+npe);
        }
        System.out.println("-------------borrar datos");
    }  
    private List<String> getEstilosTodosComponentes(String metodo)
    {
        List<String>listaComponentesEstilos=new ArrayList<String>();
        if(metodo.equals("ingresarLineaProduccion")||metodo.equals("modificarLineaProduccion"))
        {
            listaComponentesEstilos.add(" width: 150px; font-size: 12px;left: 124px; top: 20px; position: absolute  ");
            listaComponentesEstilos.add(" width: 235px; font-size: 12px;left: 124px; top: 50px; position: absolute ");                      
            listaComponentesEstilos.add(" width: 235px;height: 55px; font-size: 12px;left: 124px; top: 80px; position: absolute; overflow-y: auto ");                      
            listaComponentesEstilos.add(" width: 150px; font-size: 12px;left: 124px; top: 151px; position: absolute; ");
        }
      
        return listaComponentesEstilos;
    }
    private void setEstilosTodosComponentes(List<String>listaComponentesEstilos, String metodo)
    {
        if(metodo.equals("ingresarLineaProduccion")||metodo.equals("modificarLineaProduccion"))
        {
            this.getTextNumeroLineaProduccion().setStyle(listaComponentesEstilos.get(0).toString());
            this.getTextNombreLineaProduccion().setStyle(listaComponentesEstilos.get(1).toString());  
            this.getTextDescripcionLineaProduccion().setStyle(listaComponentesEstilos.get(2).toString());
            this.getTextFechaCreacionLineaProduccion().setStyle(listaComponentesEstilos.get(3).toString());  
        }                       
    }
    public boolean esCamposVacios(List<Object>listaComponentes, String metodo)
    {
        boolean vacio=false;
        
        if(metodo.equals("ingresarLineaProduccion")||metodo.equals("modificarLineaProduccion"))
        {
            List<String>listaComponentesEstilos=this.getEstilosTodosComponentes(metodo);
            for(int i=1;i<listaComponentes.size();i++) // empieza en 1 porque el campo numeroLista se genera automaticamente al almacenar en la base de datos un nuevo registro
            {
                boolean isEmpty=true;
                try{
                    
                    if(i==1)
                    {
                        isEmpty=((InputText)listaComponentes.get(i)).getValue().toString().isEmpty(); 
                        String str=((InputText)listaComponentes.get(i)).getValue().toString().trim();
                        if(!((!(str.matches("[a-zA-Z ]*")))==false))
                        {
                            isEmpty=true;
                            this.getLineaproduccion().mostrarMensaje("error", "Error: El nombre de la Linea de Produccion solamente se permite el ingreso de letras", "");
                        }
                    }
                }
                catch(java.lang.NullPointerException npe){
                    isEmpty=true;
                }
                if(isEmpty)
                {
                    ((InputText)listaComponentes.get(i)).setStyle(listaComponentesEstilos.get(i)+";border-color: crimson");
                    vacio=true;
                   
                    javax.faces.context.FacesContext facesContext = javax.faces.context.FacesContext.getCurrentInstance();
      
                    javax.faces.component.UIViewRoot root = facesContext.getViewRoot();
                    
                    if(metodo.equals("ingresarLineaProduccion"))
                    {
                        this.mostrarDialogo("formDialogoIngresarLineaProduccion", "DialogoIngresarLineaProduccion", true);                        
                    }
                    else if(metodo.equals("modificarLineaProduccion"))
                    {
                        this.mostrarDialogo("formDialogoModificarLineaProduccion", "DialogoModificarLineaProduccion", true);                        
                    }
                }
                i=listaComponentes.size();
            }
        }        
        return vacio;
    }
   public void mostrarDialogo(String form, String componente, boolean visible)
   {
       javax.faces.context.FacesContext facesContext = javax.faces.context.FacesContext.getCurrentInstance();
       javax.faces.component.UIViewRoot root = facesContext.getViewRoot();
       Dialog dialogo=(Dialog)root.findComponent(form).findComponent(componente);
       dialogo.setVisible(visible);
   }
  //_______________________________________________________________________________________________               
  //*********************Metodos ingresar ***********************
  public void clicBotonResetearIngresarLineaProduccion()
   {
       String form="formDialogoIngresarLineaProduccion";
       String[] componentes={"textNumeroLineaProduccion","textNombreLineaProduccion","textDescripcionLineaProduccion","textFechaCreacionLineaProduccion"};     
       this.setImputText(form, componentes);
       String metodo="ingresarLineaProduccion";
       this.setEstilosTodosComponentes(this.getEstilosTodosComponentes(metodo), metodo);       
       this.resetComponentes();
   }
   public void clicBotonIngresarLineaProduccion() ///boton guardar LineaProduccion
   {
       String form="formDialogoIngresarLineaProduccion";
       String[] componentes={"textNumeroLineaProduccion","textNombreLineaProduccion","textDescripcionLineaProduccion","textFechaCreacionLineaProduccion"};       
       this.setImputText(form,componentes);//obtiene los datos de la vista web y los carga en los imputtext de esta clase
       
       String metodo="ingresarLineaProduccion";
       List<Object>listaComponentes=new ArrayList<Object>();
        
       listaComponentes.add( this.getTextNumeroLineaProduccion());
       listaComponentes.add( this.getTextNombreLineaProduccion());                   
       listaComponentes.add( this.getTextDescripcionLineaProduccion());
       listaComponentes.add( this.getTextFechaCreacionLineaProduccion());
       
       List<String>listaComponentesEstilos=this.getEstilosTodosComponentes(metodo);
       this.setEstilosTodosComponentes(listaComponentesEstilos,metodo);
       //System.out.println("List<String>listaComponentesEstilos----- "+listaComponentesEstilos.get(0));
       if(!this.esCamposVacios(listaComponentes,metodo))
       {
           String descripcion="";
           try
           {
               descripcion=this.getTextDescripcionLineaProduccion().getValue().toString().trim().toUpperCase();
           }
           catch(Exception e){}
           this.getLineaproduccion().setLineaproduccion(new LineaProduccion("",this.getTextNombreLineaProduccion().getValue().toString().trim().toUpperCase(),
                                                                            descripcion,""));
            if(this.getLineaproduccion().ingresarLineaProduccion())
            {
                this.resetComponentes();
                this.mostrarDialogo("formDialogoIngresarLineaProduccion", "DialogoIngresarLineaProduccion", false);
                this.buscarLineaProduccion();
            }               
       }
       else
       {
           this.getLineaproduccion().mostrarMensaje("error", "Error: Datos requeridos deben ser llenados", "");           
       }
   }          
   //*********************fin Metodos ingresar ************************
   
   //*********************    Metodos consultar ************************ 
   public void buscarLineaProduccion()
   {
        List <List> datos=this.getLineaproduccion().consultarLineaProduccion();
        this.setTablaDatosLineaProduccion(datos.get(0));            
   }
   public void mostrarDatosDialogoDatosLineaProduccion()
   {
        LineaProduccion lp=(LineaProduccion)this.getLineaProduccionSeleccionado();
        List<String> datos=new ArrayList<String>();
        datos.add("Numero Linea de Produccion:"+lp.getNumeroLineaProduccion());
        datos.add("       Linea de Produccion:"+lp.getNombreLineaProduccion());
        datos.add("               Descripcion:"+lp.getDescripcion());
        datos.add("            Fecha Creacion:"+lp.getFechaCreacion());
        
        this.setDatosLineaProduccionSeleccionado(datos);  
       
   }
   public void eventoFilaSeleccionadaTablaConsultarLineaProduccion() 
   {//metodo carga los datos del ultimo horma seleccionado en el caso que se deseen actualizar
       LineaProduccion lp=(LineaProduccion)this.getLineaProduccionSeleccionado();      
       this.setLineaProduccionActualizarDatos(lp);       
       System.out.println("eventoFilaSeleccionadaTablaConsultarLineaProduccion "+lp.getNumeroLineaProduccion());
   }
   //********************* fin Metodos consultar ************************
   
   //*********************    Metodos modificar ************************
   public void clicBotonModificarLineaProduccion() //boton del toolbar
   {
       String form="formDialogoModificarLineaProduccion";
       String[] componentes={"textNumeroLineaProduccionModificar","textNombreLineaProduccionModificar","textDescripcionLineaProduccionModificar","textFechaCreacionLineaProduccionModificar"};       
       this.setImputText(form,componentes);//obtiene los datos de la vista web y los carga en los imputtext de esta clase
       
       String metodo="modificarLineaProduccion";
       List<Object>listaComponentes=new ArrayList<Object>();
        
       listaComponentes.add( this.getTextNumeroLineaProduccion());
       listaComponentes.add( this.getTextNombreLineaProduccion());                   
       listaComponentes.add( this.getTextDescripcionLineaProduccion());
       listaComponentes.add( this.getTextFechaCreacionLineaProduccion());
       
//       List<String>listaComponentesEstilos=this.getEstilosTodosComponentes(metodo);
//       this.setEstilosTodosComponentes(listaComponentesEstilos,metodo);
       this.getTextNumeroLineaProduccion().setValue(this.getLineaProduccionActualizarDatos().getNumeroLineaProduccion());
       this.getTextNombreLineaProduccion().setValue(this.getLineaProduccionActualizarDatos().getNombreLineaProduccion());
       this.getTextDescripcionLineaProduccion().setValue(this.getLineaProduccionActualizarDatos().getDescripcion());
       this.getTextFechaCreacionLineaProduccion().setValue(this.getLineaProduccionActualizarDatos().getFechaCreacion());
   }
   public void clicBotonActualizarDatosLineaProduccion()
   {
       String form="formDialogoModificarLineaProduccion";
       String[] componentes={"textNumeroLineaProduccionModificar","textNombreLineaProduccionModificar","textDescripcionLineaProduccionModificar","textFechaCreacionLineaProduccionModificar"};       
       this.setImputText(form,componentes);//obtiene los datos de la vista web y los carga en los imputtext de esta clase
       
       String metodo="modificarLineaProduccion";
       List<Object>listaComponentes=new ArrayList<Object>();
        
       listaComponentes.add( this.getTextNumeroLineaProduccion());
       listaComponentes.add( this.getTextNombreLineaProduccion());                   
       listaComponentes.add( this.getTextDescripcionLineaProduccion());
       listaComponentes.add( this.getTextFechaCreacionLineaProduccion());
      
       List<String>listaComponentesEstilos=this.getEstilosTodosComponentes(metodo);
       this.setEstilosTodosComponentes(listaComponentesEstilos,metodo);
       if(!this.esCamposVacios(listaComponentes,metodo))
       {
           String descripcion="";
           try
           {
               descripcion=this.getTextDescripcionLineaProduccion().getValue().toString().trim().toUpperCase();
           }
           catch(Exception e){}
           this.lineaproduccion.setLineaproduccion(new LineaProduccion( this.getTextNumeroLineaProduccion().getValue().toString(),
                                                                        this.getTextNombreLineaProduccion().getValue().toString().trim().toUpperCase(),
                                                                        descripcion,
                                                                        this.getTextFechaCreacionLineaProduccion().getValue().toString()));
            System.out.println("--------______Componentes no vacios");    
            if(this.lineaproduccion.modificarDatosLineaProduccion())
            {
                this.mostrarDialogo("formDialogoModificarLineaProduccion", "DialogoModificarLineaProduccion", false);
                this.resetComponentes();
                this.buscarLineaProduccion();
            }            
       }
       else
       {
           this.lineaproduccion.mostrarMensaje("error", "Error: Datos requeridos deben ser llenados", "");          
       }
   } 
   //********************* fin Metodos modificar ************************
   public void clicBotonEliminarLineaProduccion()
    {
        System.out.println("clicBotonEliminarLineaProduccion LineaProduccion para Eliminar: "+this.getLineaProduccionActualizarDatos().getNumeroLineaProduccion());
        String datosLineaProduccionEliminar=this.getLineaProduccionActualizarDatos().getNombreLineaProduccion();
        if(this.lineaproduccion.eliminarLineaProduccion(this.getLineaProduccionActualizarDatos().getNumeroLineaProduccion()))
        {
            this.lineaproduccion.mostrarMensaje("info", "Se ha eliminado Linea de Produccion: "+datosLineaProduccionEliminar,"");
            this.buscarLineaProduccion();//recarga la tabla de datos de LineaProduccion
            System.out.println("Linea de Produccion Eliminado: "+datosLineaProduccionEliminar);
        }
        else
        {
            this.lineaproduccion.mostrarMensaje("error", "No se pudo eliminar Linea de Produccion: " +datosLineaProduccionEliminar,"");
             System.out.println("No se pudo eliminar Linea de Produccion: "+datosLineaProduccionEliminar);
        }
    }
   //*************************fin eliminar **************************
}
